﻿//// --------------------------------------------------------------------------------------------------------------------
//// <copyright file="StonglyTypedCollectionTransformerTaskHelper.cs" company="DHGMS Solutions">
////   Copyright 2004-2014 DHGMS Solutions.
////      
////   Licensed under the Apache License, Version 2.0 (the "License");
////   you may not use this file except in compliance with the License.
////   You may obtain a copy of the License at
////      
////   http://www.apache.org/licenses/LICENSE-2.0
////      
////   Unless required by applicable law or agreed to in writing, software
////   distributed under the License is distributed on an "AS IS" BASIS,
////   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
////   See the License for the specific language governing permissions and
////   limitations under the License.
//// </copyright>
//// <summary>
////   TODO: Update summary.
//// </summary>
//// --------------------------------------------------------------------------------------------------------------------

//using System.Threading.Tasks;

//namespace Dhgms.TplHelper.Model.TaskHelper
//{
//    using System;
//    using System.Collections.Generic;
//    using System.Linq;
//    using System.Text;
//    using Dhgms.TplHelper.Model.Info;
//    using Dhgms.TplHelper.Model.Info.TaskResult;

//    /// <summary>
//    /// TODO: Update summary.
//    /// </summary>
//    public abstract class StonglyTypedCollectionTransformerTaskHelper<TProducer, TConsumer, TSourceType, TTaskResultClass, TTaskDataType> : InternalTransformerTaskHelper<TTaskResultClass, IList<TTaskDataType>>
//        where TProducer : Dhgms.TplHelper.Model.StronglyTypedProducer.StronglyTypedProducerBase<IList<TSourceType>>
//        where TConsumer : Dhgms.TplHelper.Model.Consumer.StrongTypedCollectionConversionConsumer<TSourceType, TTaskDataType>
//        where TTaskResultClass : TaskResultBase, IReportableCount, ITaskDataResult<IList<TTaskDataType>>, new()
//    {
//        protected StonglyTypedCollectionTransformerTaskHelper(string name)
//            : base(name)
//        {
//        }

//        /// <summary>
//        /// Gets the producer.
//        /// </summary>
//        /// <returns>The producer</returns>
//        protected abstract TProducer GetProducer();

//        /// <summary>
//        /// Gets the consumer.
//        /// </summary>
//        /// <returns>The consumer</returns>
//        protected abstract TConsumer GetConsumer();

//        protected override Task<DataRetrievalProcessorResult<IList<TTaskDataType>>> GetProcessTask()
//        {
//            var producer = GetProducer();
//            var consumer = GetConsumer();

//            var executionResult = producer.ProduceAndConsume(consumer.Consume);

//            var result = new DataRetrievalProcessorResult<IList<TTaskDataType>>(executionResult, consumer.Data);
//            return result;
//        }
//    }
//}
